package com.xq;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

/**
 * @author jltxseo
 *         Created by junlintianxia on 2016/07/13.
 *     发布消息的回调类
 *     必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
 *     每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。
 *     在回调中，将它用来标识已经启动了该回调的哪个实例。
 */
public class PushCallback implements MqttCallback{
    /**
     * 在断开连接时调用。
     * @param cause the reason behind the loss of connection.
     */
    @Override
    public void connectionLost(Throwable cause) {
        // 连接丢失后，一般在这里面进行重连
        System.out.println("connect restart");
    }

    /**
     *接收已经预订的发布。
     * @param topic name of the topic on the message was published to
     * @param message the actual message.
     * @throws Exception
     */
    @Override
    public void messageArrived(String topic, MqttMessage message) throws Exception {
        // subscribe后得到的消息会执行到这里面
        System.out.println("receive topic : " + topic);
        System.out.println("receive Qos : " + message.getQos());
        System.out.println("receive content : " + new String(message.getPayload()));
    }

    /**
     *  接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
     *  由 MqttClient.connect 激活此回调。
     * @param token the delivery token associated with the message.
     */
    @Override
    public void deliveryComplete(IMqttDeliveryToken token) {
        System.out.println("deliveryComplete---------" + token.isComplete());
    }
}
